/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package commonlib.drivers;
import commonlib.domain.Rules;
import commonlib.domain.IteratorTST;
import commonlib.stubs.ABPair;
import java.util.ArrayList;
import java.util.Scanner;
/**
 *
 * @author jorge.daniel.negrete
 */
public class DriverRules {


	public static void main(String[] args) {

		Scanner br=new Scanner(System.in);
		Rules Regla=new Rules();
		ABPair ab=new ABPair(null,null);
        int op=-1;
        System.out.println("Juego De Pruebas de la Clase Reglas-IntTSTPair");
        while(op!=0)
        {
        	System.out.println("Menu de Funciones");
            System.out.println("1.Insertar Regla");
            System.out.println("2.Insertar Reglas");
            System.out.println("3.Consultar Regla");
            System.out.println("4.Eliminar Regla");
            System.out.println("5.Probabilidad de las Reglas");
            System.out.println("6.Usar Iterador de Betas");
            System.out.println("0.Salir");
           op=br.nextInt();
           switch(op)
           {
           case 1:
        	      System.out.println("Escriba la Alpha");
        	      ab.setAlpha(br.next());
        	      System.out.println("Escriba la Beta");
        	      ab.setBeta(br.next());
        	      System.out.println("Escriba la frecuencia");
        	      Regla.addRule(ab,br.nextInt());
        	      System.out.println("Regla Agregada");
        	      break;
           case 2:
               	 System.out.println("Escribe el numero de Reglas a insertar");
               	 int c=br.nextInt();
        	     System.out.println("Escriba las Reglas");
        	     int j=0;

        	     ArrayList<ABPair> a=new ArrayList<ABPair>();
        	     ArrayList<Integer> b=new ArrayList<Integer>();
               	  while(j<c)
               	  {
               		ab=new ABPair(null,null);
               		System.out.println("Escriba la Alpha "+j);
               		ab.setAlpha(br.next());
               		System.out.println("Escriba la betha "+j);
               		ab.setBeta(br.next());
               		System.out.println("Escriba la frecuencia de la regla "+j);
               		b.add(br.nextInt());
               		a.add(ab);
               		j++;
               	  }
      	           Regla.addRuleList(a,b);
     	           System.out.println("Palabra Agregada");
     	           break;
           case 3:
        	      System.out.println("Escriba la Regla consultar");
        	      System.out.println("Escriba la Alpha");
        	      ab.setAlpha(br.next());
        	      System.out.println("Escriba la Beta");
        	      ab.setBeta(br.next());
     	          if(Regla.findRule(ab))
     	              System.out.println("Existe");
     	          else
     	        	 System.out.println("No Existe");
     	          break;
           case 4:
        	    System.out.println("Escriba la Regla a eliminar");
     	        System.out.println("Escriba la Alpha");
     	        ab.setAlpha(br.next());
     	        System.out.println("Escriba la Beta");
     	        ab.setBeta(br.next());
     	        if(Regla.deleteRule(ab))
     	        {
     	        	System.out.println("Regla Eliminada");
     	        }
     	        else
     	        {
     	        	System.out.println("Regla no existe");
     	        }
     	          break;
           case 5:
     	      System.out.println("Escriba la Alpha");
     	      ab.setAlpha(br.next());
     	      System.out.println("Escriba la Beta");
     	      ab.setBeta(br.next());
     	      System.out.println(Regla.getRuleProb(ab));
     	      break;
           case 6:
        	   System.out.println("Escriba la Alpha");
      	       ab.setAlpha(br.next());
        	   int opI=-1;
        	      IteratorTST<Integer> i=Regla.findAlpha(ab.getAlpha());
        	      while(opI!=0)
        	      {
        	    	  System.out.println("1.HasNext");
        	    	  System.out.println("2.Next");
        	    	  System.out.println("3.HasNexBro");
        	    	  System.out.println("4.NextBro");
        	    	  System.out.println("5.HasNextBack");
        	    	  System.out.println("6.NextBack");
        	    	  System.out.println("0.Salir");

        	    	  opI=br.nextInt();
        	    	  switch(opI)
        	    	  {
        	    	  case 1:
        	    		      if(i.hasNext()!=0)
        	    		      {
        	    		    	  System.out.println("tiene mas elementos que recorrer");
        	    		      }
        	    		      else
        	    		      {
        	    		    	  System.out.println("No tiene mas elementos que recorrer");
        	    		      }
        	    	          break;
        	    	  case 2:
        	    		      System.out.println(i.next().getLetter());
        	    		      break;
        	    	  case 3:
        	    		      if(i.hasNextBro())
    	    		          {
    	    		     	     System.out.println("tiene mas hermanos que recorrer");
    	    		          }
    	    		          else
    	    		          {
    	    		    	     System.out.println("No tiene mas hermanos que recorrer");
    	    		          }
        	    	          break;
        	    	  case 4:
              	    		  System.out.println(i.nextBro().getLetter());
    	           		      break;
        	    	  case 5:
    	    		      if(i.hasNextBack()!=0)
    	    		      {
    	    		    	  System.out.println("tiene mas elementos que recorrer atras");
    	    		      }
    	    		      else
    	    		      {
    	    		    	  System.out.println("No tiene mas elementos que recorrer atras");
    	    		      }
    	    	          break;
        	    	  case 6:
          	    		  System.out.println(i.nextBack().getLetter());
	           		      break;
        	    	  }

        	      }
        	      break;
           }

        }




	}

}

